﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;

namespace UI.Desktop
{
    public partial class frmEditarPaciente : Form
    {
        string numprov;
        string numciudad;
        private DataSet numProvincia;
        bool incorrecto = false;
        
        public frmEditarPaciente()
        {
            InitializeComponent();
            Business.Entities.Paciente provi = new Business.Entities.Paciente();
            DataSet dsProv = new DataSet();
            dsProv = provi.ObtenerListaProvincias();
            

            numProvincia = new DataSet();
            numProvincia = dsProv;
        }

        #region CERRAR

        private void btnCerrar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        #endregion

        #region CBPACIENTE

        private void cbPaciente_Click_1(object sender, EventArgs e)
        {
            Business.Entities.Paciente pac = new Business.Entities.Paciente();
            DataSet dsPac = new DataSet();
            dsPac = pac.ObtenerListaPacientesParaModificar();
            ObtenerPacientes(dsPac);
        }

        private void ObtenerPacientes(DataSet dsPac)
        {
            cbPaciente.Text = "Seleccione el paciente";
            cbPaciente.DataSource = dsPac.Tables["Paciente"];
            cbPaciente.DisplayMember = dsPac.Tables["Paciente"].Columns[1].Caption.ToString();
        }

        #endregion

        #region ELIMINAR - "NO FUNCIONANDO"

        private void btnEliminar_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("¿Desea eliminar el Paciente " + txtApellido.Text.ToString() + " " + txtNombre.Text.ToString() + "?", "Atención", MessageBoxButtons.YesNo, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
            {
                try
                {
                    Business.Entities.Paciente Pac2 = new Business.Entities.Paciente();
                    // MessageBox.Show("Select * from Personal where DNI = '+ dni +'");
                    Pac2.EliminarPaciente(cbPaciente.Text.ToString());
                    MessageBox.Show("Paciente eliminado correctamente.");
                    this.Refresh();
                }
                catch 
                {
                    MessageBox.Show("El Paciente no se pudo eliminar, revise que el paciente no tenga turnos asignados.-", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }

            }
        }

        #endregion

        #region AGREGAR CIUDAD

        private void btnAgregarCiudad_Click(object sender, EventArgs e)
        {
            MessageBox.Show(numprov + "---" + numciudad);
            if (numprov == null)
            {
                MessageBox.Show("Debe seleccionar una Provincia.");
            }
            else
            {
                frmAltaCiudad ac = new frmAltaCiudad(numprov);
                ac.Show();
            }
        }

        #endregion

        #region GUARDAR PACIENTE

        private void btnGuardarPaciente_Click(object sender, EventArgs e)
        {
            if (txtNombre.Text == "" || txtApellido.Text == "" || cbPaciente.Text == "" || numprov == "" || numciudad == "")
            {
                MessageBox.Show("Campos invalidos, no puede haber ninguno vacio", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            else if (incorrecto == true)
            {
                MessageBox.Show("Campos invalidos, reviselos", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                obtengoIDs();
                
                Business.Entities.Paciente enPac = new Business.Entities.Paciente();
                string concatenado = cbPaciente.Text;
                DataSet dsPac = new DataSet();
                dsPac = enPac.ObtenerDatosPaciente(concatenado);              
                
                dsPac.Tables["Paciente"].Rows[0][1] = txtDNI.Text;
                dsPac.Tables["Paciente"].Rows[0][2] = txtNombre.Text;
                dsPac.Tables["Paciente"].Rows[0][3] = txtApellido.Text;
                dsPac.Tables["Paciente"].Rows[0][4] = txtTelefono.Text;
                dsPac.Tables["Paciente"].Rows[0][5] = txtEmail.Text;
                dsPac.Tables["Paciente"].Rows[0][6] = txtDireccion.Text;
                dsPac.Tables["Paciente"].Rows[0][7] = numprov;
                dsPac.Tables["Paciente"].Rows[0][8] = numciudad;            
                dsPac.Tables["Paciente"].Rows[0][10] = cbObraSocial.Text;
                dsPac.Tables["Paciente"].Rows[0][11] = chkPaciente.Checked;
                
                if (rdbMasculino.Checked == true)
                {  dsPac.Tables["Paciente"].Rows[0][9] = "M";   }                
                else { dsPac.Tables["Paciente"].Rows[0][9] = "F"; }



                enPac.EditarPaciente(dsPac);
                MessageBox.Show("El Paciente fue modificado con exito", "Informacion", MessageBoxButtons.OK, MessageBoxIcon.Information);
                this.Close();

            }
        }

        private void obtengoIDs()
        {
            Business.Entities.Paciente enCiu = new Business.Entities.Paciente();
            DataSet dsCiu = new DataSet();
            dsCiu = enCiu.ObtenerListaCiudades(numprov);

            bool parada = false;
            for (int i = 0; i < 7000 && parada != true; i++)
            {
                if (dsCiu.Tables["ciudad"].Rows[i][1].ToString() == cbCiudad.Text.ToString())
                {
                    numciudad = dsCiu.Tables["ciudad"].Rows[i][0].ToString();// en la posicion 0 esta el id de la provincia
                    parada = true;
                }
            }
            MessageBox.Show(numprov + numciudad);
        }

        #endregion

        #region CBOBRASOCIAL

        private void cbObraSocial_Click(object sender, EventArgs e)
        {
            Business.Entities.Paciente ObraSocial = new Business.Entities.Paciente();
            DataSet dsObraSocial = new DataSet();
            dsObraSocial = ObraSocial.ObtenerListaObraSocial();
            ObtenerObraSocial(dsObraSocial);        
        }

        private void ObtenerObraSocial(DataSet dsObraSocial)
        {
            cbObraSocial.Text = "Seleccione su Obra social";
            cbObraSocial.DataSource = dsObraSocial.Tables["ObraSocial"];
            cbObraSocial.DisplayMember = dsObraSocial.Tables["ObraSocial"].Columns[1].Caption.ToString(); // como dsProv lleva el id_prov y el nombre ponemos 1 que es la columna del nombre
        }

        #endregion

        #region CBPROVINCIA

        private void cbProvincia_Click(object sender, EventArgs e)
        {
            Business.Entities.Paciente provincia = new Business.Entities.Paciente();
            DataSet dsProv = new DataSet();
            dsProv = provincia.ObtenerListaProvincias();
            ObtenerProvincias(dsProv);
        }

        private void ObtenerProvincias(DataSet dsProv)
        {
            cbProvincia.Text = "Seleccione Provincia";
            cbProvincia.DataSource = dsProv.Tables["provincia"];
            cbProvincia.DisplayMember = dsProv.Tables["provincia"].Columns[1].Caption.ToString(); // como dsProv lleva el id_prov y el nombre ponemos 1 que es la columna del nombre
        }

        private void cbProvincia_TextChanged(object sender, EventArgs e)
        {
            Business.Entities.Paciente enCiu = new Business.Entities.Paciente();
            DataSet dsCiu = new DataSet();
            try
            {
                if (cbProvincia.SelectedIndex > 0)
                {
                    string prov = cbProvincia.Text.ToString();
                    bool parar = false;
                    for (int i = 0; i < 6000 && parar != true; i++)
                    {
                        if (numProvincia.Tables["provincia"].Rows[i][1].ToString() == prov)
                        {
                            // en la posicion 0 esta el id de la provincia
                            numprov = numProvincia.Tables["provincia"].Rows[i][0].ToString();
                            parar = true;
                            dsCiu = enCiu.ObtenerListaCiudades(numprov);
                        }
                    }
                    ObtenerCiudades(dsCiu);
                }
                else { cbCiudad.SelectedIndex = -1; cbCiudad.DataSource = null; }
            }
            catch (Exception ex)
            {
                // MessageBox.Show("Seleccione primero una provincia", "Cuidado", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        #endregion

        #region CBCIUDAD

        private void ObtenerCiudades(DataSet dsCiu)
        {
            cbCiudad.Text = "Seleccione Ciudad";
            cbCiudad.DataSource = dsCiu.Tables["ciudad"];
            cbCiudad.DisplayMember = dsCiu.Tables["ciudad"].Columns[1].Caption.ToString();
        }

        #endregion

        #region AGREGAR OS

        private void btnAgregarOS_Click(object sender, EventArgs e)
        {
            frmAltaObraSocial aos = new frmAltaObraSocial();
            aos.Show();
        }

        #endregion

        #region MOSTRAR DATOS DE PACIENTE

        private void cbPaciente_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                

                string concatenado = cbPaciente.Text.ToString();
                Business.Entities.Paciente Pac = new Business.Entities.Paciente();
                DataSet dsPac = Pac.ObtenerDatosPaciente(concatenado);

                txtDNI.Text = dsPac.Tables["Paciente"].Rows[0][1].ToString();
                txtNombre.Text = dsPac.Tables["Paciente"].Rows[0][2].ToString();
                txtApellido.Text = dsPac.Tables["Paciente"].Rows[0][3].ToString();
                txtDireccion.Text = dsPac.Tables["Paciente"].Rows[0][6].ToString();
                txtEmail.Text = dsPac.Tables["Paciente"].Rows[0][5].ToString();
                txtTelefono.Text = dsPac.Tables["Paciente"].Rows[0][4].ToString();
                
                //prueba para obtener el nombre de la ciudad y prov del paciente                
                numciudad = dsPac.Tables["Paciente"].Rows[0][8].ToString();         //ID CIUDAD QUE TIENE ASIGNADO EL PACIENTE
                Business.Entities.Ciudad ciudad = new Business.Entities.Ciudad();
                DataSet dsCiudad = ciudad.obtenerNombreCiudad(numciudad);           //OBTENGO EL NOMBRE DE LA CIUDAD

                if (dsCiudad.Tables["Ciudad"].Rows[0][0].ToString() == "")
                {
                    cbCiudad.Text = "";                                             
                }
                else
                {
                    string c = dsCiudad.Tables["Ciudad"].Rows[0][0].ToString();     //ASIGNO EL NOMBRE DE LA CIUDAD OBTENIDA AL cbCiudad
                    cbCiudad.Text = c;
                }

                numprov = dsPac.Tables["Paciente"].Rows[0][7].ToString();                       //ID PROVINCIA QUE TIENE ASIGNADO EL PACIENTE
                Business.Entities.Provincia provincia = new Business.Entities.Provincia();
                DataSet dsProvincia = provincia.obtenerNombreProvincia(numprov);                //OBTENGO NOMBRE DE PROVINCIA
                string p = dsProvincia.Tables["Provincia"].Rows[0][0].ToString();               
                cbProvincia.Text = p;                                                           //ASIGNO NOMBRE DE PROVINCIA AL COMBO PROVINCIA

                //MessageBox.Show(numciudad + c + "" + numprov + p);


                chkPaciente.Checked = Convert.ToBoolean(dsPac.Tables["Paciente"].Rows[0][11]);
                cbObraSocial.Text = dsPac.Tables["Paciente"].Rows[0][10].ToString();

                if (dsPac.Tables["Paciente"].Rows[0][9].ToString() == "M")
                {
                    rdbMasculino.Checked = true;
                }
                else
                {
                    rdbFemenino.Checked = true;
                }

                cbObraSocial.Text = dsPac.Tables["Paciente"].Rows[0][10].ToString();
                
                //LIMPIO EL DATA SER
                dsPac.Reset();
                if (dsPac.Tables.Contains("Paciente"))
                {
                    dsPac.Tables.Remove("Paciente");
                }
                
            }
            catch { }
            
        }

        #endregion

        private void frmEditarPaciente_Load(object sender, EventArgs e)
        {

        }

        #region ERROR PROVIDER

        private void txtDNI_Leave(object sender, EventArgs e)
        {
            if (!Regex.Match(txtDNI.Text, @"^((\d{8})|(\d{8}))$").Success)
            {
                errorProvider1.SetError(txtDNI, "DNI incorrecto, formato correcto: 00000000");
                incorrecto = true;
            }
            else { errorProvider1.SetError(txtDNI, ""); incorrecto = false; }
        }

        private void txtNombre_Leave(object sender, EventArgs e)
        {
            if (!Regex.Match(txtNombre.Text, @"^[A-Za-zñÑáéíóúÁÉÍÓÚçÇ\s]{3,30}$").Success)
            {
                errorProvider1.SetError(txtNombre, "Nombre incorrecto");
                incorrecto = true;
            }
            else { errorProvider1.SetError(txtNombre, ""); incorrecto = false; }
        }

        private void txtApellidos_Leave(object sender, EventArgs e)
        {
            if (!Regex.Match(txtApellido.Text, @"^[A-Za-zñÑáéíóúÁÉÍÓÚçÇ\s]{3,40}$").Success)
            {
                errorProvider1.SetError(txtApellido, "Apellidos incorrectos, caracteres invalidos");
                incorrecto = true;
            }
            else { errorProvider1.SetError(txtApellido, ""); incorrecto = false; }
        }

        private void txtTelefono_Leave(object sender, EventArgs e)
        {
            if (!Regex.Match(txtTelefono.Text, @"^[0-9]{10}$").Success)
            {
                errorProvider1.SetError(txtTelefono, "Telefono incorrecto, caracteres invalidos");
                incorrecto = true;
            }
            else { errorProvider1.SetError(txtTelefono, ""); incorrecto = false; }
        }

        private void txtEmail_Leave(object sender, EventArgs e)
        {
            if (txtEmail.Text == "") errorProvider1.SetError(txtEmail, "");
            else if (!Regex.Match(txtEmail.Text, @"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$").Success)
            {
                errorProvider1.SetError(txtEmail, "Email incorrectos, caracteres invalidos");
                incorrecto = true;
            }
            else { errorProvider1.SetError(txtEmail, ""); incorrecto = false; }
        }

        private void txtDireccion_Leave(object sender, EventArgs e)
        {/*
            if (!Regex.Match(txtDireccion.Text, @"^[A-Za-zñÑáéíóúÁÉÍÓÚçÇ\s]+[(0-9){5}]{3,50}$").Success)
            {
                errorProvider1.SetError(txtDireccion, "Dirección incorrecta, caracteres invalidos");
                incorrecto = true;
            }
            else { errorProvider1.SetError(txtDireccion, ""); incorrecto = false; }
       */
        }

        #endregion               
        
        /*private void prueba_Click(object sender, EventArgs e)
        {
            Business.Entities.Paciente enCiu = new Business.Entities.Paciente();
            DataSet dsCiu = new DataSet();
            dsCiu = enCiu.ObtenerListaCiudades(numprov);

            bool parada = false;
            for (int i = 0; i < 7000 && parada != true; i++)
            {
                if (dsCiu.Tables["ciudad"].Rows[i][1].ToString() == cbCiudad.Text.ToString())
                {
                    numciudad = dsCiu.Tables["ciudad"].Rows[i][0].ToString();// en la posicion 0 esta el id de la provincia
                    parada = true;
                }
            }
            MessageBox.Show(numprov + numciudad);
        }
        */

    }
}
